/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mesaayuda.main;

/**
 *
 * @author Juany
 */
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import mesaayuda.DAO.TipousuarioJpaController;
import mesaayuda.model.Usuario;
import mesaayuda.model.Causascerrarticket;
import mesaayuda.model.Departamento;
import mesaayuda.model.Ticket;
import mesaayuda.model.Tipousuario;
import mesaayuda.model.Topicoayuda;
import mesaayuda.DAO.UsuarioJpaController;
import mesaayuda.DAO.TicketJpaController;
import mesaayuda.DAO.DepartamentoJpaController;
import mesaayuda.DAO.CausascerrarticketJpaController;
import mesaayuda.DAO.TopicoayudaJpaController;
import mesaayuda.DAO.exceptions.PreexistingEntityException;
import mesaayuda.model.Tipousuario;
import java.text.DateFormat;
import java.util.List;
public class Main {

   EntityManagerFactory emf = Persistence.createEntityManagerFactory("JuanaValdezPU");
   
    public static void main(String[] args)throws PreexistingEntityException, Exception{
    
        Main metodos = new Main();
  
       metodos.RegistrarUsuario(6, 6,"Valdez","Jiménez","Juana", "juvaldez@uv.mx", "2288522306", "juvaldez", "12345");
       metodos.RegistrarUsuario(7, 7,"Zarate","Sanchez","Manuel", "zamasa@hotmail.com", "2288903343", "zamasa", "24680");
       
       metodos.ModificarUsuario(7, 6,"Martinez","","", "mamasa@hotmail.com", "", "mamasa", "");        

       metodos.RegistrarTicket(1, 6, 3, 1, 1, 1, 1001, "Necesito mis claves para depositar la colegiatura", "Abierto", (short)0, (short)0); 
       metodos.RegistrarTicket(2, 6, 4, 3, 5, 1, 1002, "Problemas de conexion a moodle", "Abierto", (short)0, (short)0);               
       
       metodos.ModificarTicket(2, 3, 3, 6, 0, "Problemas con mi equipo de cómputo", "", 0, (short)0);
       
        metodos.obtieneDepto();     
    }
                                                                   
    
    public void RegistrarUsuario(int vIdUsuario, int vIdTipoUsuario, String vAppaterno, 
            String vApmaterno, String vNombre, String vEmail, String vTelefono, String vUsuario,
            String vContraseña)
    {
        try
        {
            UsuarioJpaController usuarioDAO = new UsuarioJpaController(emf);
            TipousuarioJpaController tipoUsuarioDAO = new TipousuarioJpaController(emf);       
            Usuario Usuario = new Usuario();
            Usuario.setIdUsuario(vIdUsuario);       
            Tipousuario TipoUsuario = new Tipousuario();
            TipoUsuario = tipoUsuarioDAO.findTipousuario(vIdTipoUsuario);        
            Usuario.setIdTipousuario(TipoUsuario);
            Usuario.setAppaterno(vAppaterno);
            Usuario.setApmaterno(vApmaterno);
            Usuario.setNombre(vNombre);
            Usuario.setEmail(vEmail);
            Usuario.setTelefono(vTelefono);
            Usuario.setUsuario(vUsuario);
            Usuario.setContraseña(vContraseña);       
            usuarioDAO.create(Usuario);
       
            System.out.println("\n El usuario: " + vNombre + " " + vAppaterno + " " + vApmaterno + " fué registrado correctamente");
        }
        catch(Exception e)
        {
            System.out.println("Error al registrar el usuario: " + vNombre + " " + vAppaterno + " " + vApmaterno);
        }
    }
    public void ModificarUsuario(int vIdUsuario, int vIdTipoUsuario, String vAppaterno, 
            String vApmaterno, String vNombre, String vEmail, String vTelefono, String vUsuario, 
            String vContraseña)
    {
        try
        {
            UsuarioJpaController usuarioDAO = new UsuarioJpaController(emf);
            TipousuarioJpaController tipoUsuarioDAO = new TipousuarioJpaController(emf);
        
            Usuario Usuario = new Usuario();
            Usuario = usuarioDAO.findUsuario(vIdUsuario);
            
            if(vIdTipoUsuario != 0)
            {
                Tipousuario iTipoUsuario = new Tipousuario();
                iTipoUsuario = tipoUsuarioDAO.findTipousuario(vIdTipoUsuario);
                Usuario.setIdTipousuario(iTipoUsuario);
            }
            
            if(vAppaterno != "") 
                Usuario.setAppaterno(vAppaterno);
            if(vApmaterno != "")
                Usuario.setApmaterno(vApmaterno);
            if(vNombre != "")
                Usuario.setNombre(vNombre);
            if(vEmail != "")
                Usuario.setEmail(vEmail);
            if(vTelefono != "")
                Usuario.setTelefono(vTelefono);
            if(vUsuario != "")
                Usuario.setUsuario(vUsuario);
            if(vContraseña != "")
                Usuario.setContraseña(vContraseña);
            
            usuarioDAO.edit(Usuario);
            
            Usuario = usuarioDAO.findUsuario(vIdUsuario);
            vNombre= Usuario.getNombre();
            vAppaterno= Usuario.getAppaterno();
            vApmaterno= Usuario.getApmaterno();
            vEmail= Usuario.getEmail();
            vTelefono= Usuario.getTelefono();
            vUsuario= Usuario.getUsuario();
            vContraseña= Usuario.getContraseña();
            System.out.println("\n El usuario : " + vNombre + " fué modificado correctamente"); 
            System.out.println("Nuevos Datos : " + vNombre + " " + vAppaterno + " " + vApmaterno + " " + vEmail + " " + vTelefono + " "+ vUsuario + " " + vContraseña); 
        }
        catch(Exception e)
        {
            System.out.println("Error al modificar el usuario");
        }
    }
    public void RegistrarTicket(int vIdTicket, int vIdUsuarioSolicitante, int vIdUsuarioAtiende,
            int vIdDepartamento, int vIdTopicoAyuda, int vIdCausasCerrarTicket, int vFolio,
            String vDescripcionTicket, String vStatus, int vCalificacion, short vResolvioProblema)
    {
        try
        {
            TicketJpaController ticketDAO = new TicketJpaController(emf);
            UsuarioJpaController usuarioDAO = new UsuarioJpaController(emf);
            DepartamentoJpaController departamentoDAO = new DepartamentoJpaController(emf);
            TopicoayudaJpaController topicoAyudaDAO = new TopicoayudaJpaController(emf);
            CausascerrarticketJpaController causasCerrarTicketDAO = new CausascerrarticketJpaController(emf);       
            Ticket Ticket = new Ticket();
            Ticket.setIdTicket(vIdTicket);        
            Usuario UsuarioSolicitante = new Usuario();
            UsuarioSolicitante = usuarioDAO.findUsuario(vIdUsuarioSolicitante);
            Ticket.setIdUsuariosolicitante(UsuarioSolicitante);            
            Usuario UsuarioAtiende = new Usuario();
            UsuarioAtiende = usuarioDAO.findUsuario(vIdUsuarioAtiende);
            Ticket.setIdUsuarioatiende(UsuarioAtiende);                        
            Ticket.setIdDepartamento(vIdDepartamento);
            //Ticket.setIdDepartamento(Departamento);            
            Topicoayuda TopicoAyuda = new Topicoayuda();
            TopicoAyuda = topicoAyudaDAO.findTopicoayuda(vIdTopicoAyuda);
            Ticket.setIdTopicoayuda(TopicoAyuda);            
            Causascerrarticket CausasCerrarTicket = new Causascerrarticket();
            CausasCerrarTicket = causasCerrarTicketDAO.findCausascerrarticket(vIdCausasCerrarTicket);
            Ticket.setIdCausascerrarticket(CausasCerrarTicket);            
            Ticket.setFolio(vFolio);
            Ticket.setDescripcion(vDescripcionTicket);
            Ticket.setStatus(vStatus);
            Ticket.setCalificacion(vCalificacion);
            Ticket.setResolvioproblema((short)vResolvioProblema);            
            DateFormat dfDateMedium = DateFormat.getDateInstance(DateFormat.MEDIUM);
            Ticket.setFecharegistro(dfDateMedium.parse("22/02/2014"));            
            ticketDAO.create(Ticket);       
            System.out.println("\n El ticket: " + vFolio + " fué registrado correctamente");
        }
        catch(Exception e)
        {
            System.out.println("Error al registrar el ticket");
        }
    }
    public void ModificarTicket(int vIdTicket, int vIdUsuarioAtiende, int vIdDepartamento, 
            int vIdTopicoAyuda, int vIdCausasCerrarTicket, String vDescripcionTicket, 
            String vStatus, int vCalificacion, short vResolvioProblema)
    {
        try
        {
            TicketJpaController ticketDAO = new TicketJpaController(emf);
            UsuarioJpaController usuarioDAO = new UsuarioJpaController(emf);
            DepartamentoJpaController departamentoDAO = new DepartamentoJpaController(emf);
            TopicoayudaJpaController topicoAyudaDAO = new TopicoayudaJpaController(emf);
            CausascerrarticketJpaController causasCerrarTicketDAO = new CausascerrarticketJpaController(emf);
        
            Ticket Ticket = new Ticket();
            Ticket = ticketDAO.findTicket(vIdTicket);
            
            if(vIdUsuarioAtiende != 0)
            {
                Usuario UsuarioAtiende = new Usuario();
                UsuarioAtiende = usuarioDAO.findUsuario(vIdUsuarioAtiende);
                Ticket.setIdUsuarioatiende(UsuarioAtiende);
            }
            
            if(vIdDepartamento != 0)
            {
                Departamento Departamento = new Departamento();
                Departamento = departamentoDAO.findDepartamento(vIdDepartamento);
                Ticket.setIdDepartamento(vIdDepartamento);
            }
            
            if(vIdTopicoAyuda != 0)
            {
                Topicoayuda TopicoAyuda = new Topicoayuda();
                TopicoAyuda = topicoAyudaDAO.findTopicoayuda(vIdTopicoAyuda);
                Ticket.setIdTopicoayuda(TopicoAyuda);
            }
            
            if(vIdCausasCerrarTicket != 0)
            {
                Causascerrarticket CausasCerrarTicket = new Causascerrarticket();
                CausasCerrarTicket = causasCerrarTicketDAO.findCausascerrarticket(vIdCausasCerrarTicket);
                Ticket.setIdCausascerrarticket(CausasCerrarTicket);
            }
            
            if(vDescripcionTicket != "")
                Ticket.setDescripcion(vDescripcionTicket);
            if(vStatus != "")
                Ticket.setStatus(vStatus);
            if(vCalificacion != 0)
                Ticket.setCalificacion(vCalificacion);
            if(vResolvioProblema != 0)
                Ticket.setResolvioproblema((short)vResolvioProblema);
            
            ticketDAO.edit(Ticket);
            Ticket = ticketDAO.findTicket(vIdTicket);
            int folio= Ticket.getFolio();
            System.out.println("\n El ticket: "+ folio + " fué modificado correctamente");            
        }
        catch(Exception e)
        {
            System.out.println("Error al modificar el ticket");
        }
    }   
    public int obtieneTicketDepto(int vIdDepartamento)
    {  
        EntityManager em = emf.createEntityManager();        
        try
        {
            Query q = em.createQuery("SELECT COUNT(t) FROM Ticket t WHERE t.idDepartamento = :pIdDepartamento");
            q.setParameter("pIdDepartamento", vIdDepartamento);
            Object vContador = q.getSingleResult();
        
            if(vContador == null)
            {
                return 0;
            }
            return Integer.valueOf(vContador.toString());
        }
        catch(Exception e)
        {
            System.out.println("Error al obtener el número de tickets " );
            return 0;
        }
    }
    
    public void obtieneDepto(){       
       EntityManager em = emf.createEntityManager();
       
       try {
        System.out.println("Consulta ");
        System.out.println("No. de Tickets Asignados por Departamento: ");       
        Query q = em.createQuery("select u from Departamento u");
        List<Departamento> todoList = q.getResultList();
        for (Departamento Departamento : todoList) {
            System.out.println("\nDepartamento: "
            + Departamento.getDescripcion());
            int noTickets = obtieneTicketDepto(Departamento.getIdDepartamento());
            System.out.println("Numero de Tickets: "
                + noTickets);
        
        }
      }
        catch(Exception e)
        {
            System.out.println("Error al obtener el listado de Departamentos " );           
        }
    }        
                            
}
